跳到主要内容

Linux 环境下 PostgreSQL 的调试

GDB 的安装

一般而言,Linux 的各个发行版本都配备了 gdb 调试器,但若是没有的话,则需要使用对应操作系统的包管理器进行安装。

比如在笔者的 Fedora Linux 下面,对应的安装指令便是。

sudo dnf install gdb

将 PostgreSQL 源代码导入到 VSCODE 中

VSCODE 是一款简洁而强大的编辑器,非常适合于阅读 PostgreSQL 的源代码,我们只需要根据它的网站的指示,下载对应的软件包,之后在 VSCODE 中打开 PostgreSQL 的源代码文件夹,就可以顺利完成导入的工作

(VSCODE 将会提醒你安装那些需要用到的插件)。

import_to_vscode

使用 GDB 调试 PostgreSQL

首先,我们假定 PostgreSQL 已经顺利启动,在这个基础上,我们需要使用 psql 工具连接到 PostgreSQL 上,参考下面的代码。

psql -d postgres

之后,调用 pg_backend_pid() 函数,获取对应后端进程的 PID。

select_pid

再打开一个 shell 窗口,输入如下的指令

gdb -p [由 pg_backend_pid() 返回的 PID]
# 如果 gdb 询问是否激活 debuginfod,选择 y,打开即可

之后,我们就可以展开 PostgreSQL 的调试工作了,方法就是在 psql 中执行某项 SQL 指令,之后在 gdb 窗口中跟踪执行的流程。

一些常用的 gdb 指令

n/next ... 执行下一条指令
s/step ... 执行下一条指令(区别:step 指令遇到函数会深入到函数内部,而 next 不会)
l/list ... 罗列当前所处的代码
b/break ... 打断点(让代码运行到此处停止)
print ... 打印某一个变量的数据
backtrace ... 打印函数调用栈
set print element 0 ... 让 gdb 可以打印长文本字符串
!shell ... 执行对应的 shell 指令

关于 GDB 工具

GDB Logo

gdb 是 GNU 项目计划中的“调试器”,被应用于调试 C/C++、D、Rust 等语言所编写的软件。